﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WC.DL.DALC.Factory;
using WC.BL.BE;

namespace WC.BL.BCC
{
    public class UsuarioBC
    {

        private static string enviarCorreo(string pNuevaClave, string pCorreo, string pnombre)
        {
            string retval = string.Empty;

            System.Net.Mail.MailMessage correo = new System.Net.Mail.MailMessage();
            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
            correo.From = new System.Net.Mail.MailAddress(ParametroBC.Instance.getParamValue("From"));
            correo.To.Add(pCorreo);
            correo.Subject = ParametroBC.Instance.getParamValue("Subject");
            correo.Body = ParametroBC.Instance.getParamValue("Body0") + pnombre + ",\n\n";
            correo.Body += ParametroBC.Instance.getParamValue("Body1") + pNuevaClave + "\n";
            correo.Body += ParametroBC.Instance.getParamValue("Body2") + "\n\n";
            correo.Body += ParametroBC.Instance.getParamValue("Body3") + "\n";
            correo.Body += ParametroBC.Instance.getParamValue("Body4");
            
            correo.IsBodyHtml = false;
            correo.Priority = System.Net.Mail.MailPriority.Normal;
            correo.BodyEncoding = Encoding.UTF8;
            correo.SubjectEncoding = Encoding.UTF8;

            smtp.Host = ParametroBC.Instance.getParamValue("Host");
            smtp.Port = Int32.Parse(ParametroBC.Instance.getParamValue("Port"));
            smtp.Timeout = Int32.Parse(ParametroBC.Instance.getParamValue("Timeout"));
            //smtp.Credentials = new System.Net.NetworkCredential(ParametroBC.Instance.getParamValue("UsuMail"),
            //                                                    ParametroBC.Instance.getParamValue("ClaveMail"));
            try
            {
                smtp.Send(correo);
            }
            catch (Exception ex)
            {
                retval = ex.Message;
            }

            return retval;
        }
        

        public static string resetPassword(string pUsuario)
        {
            string retval = string.Empty;
            try
            {
                UsuarioBE objUsuario = DAOFactory.UsuarioDALC.read(pUsuario);
                if (objUsuario == null)//No existe el usuario, es la primera vez que el usuario entra al sistema
                {
                    ClienteBE objClienteBE = DAOFactory.ClienteDALC.read(pUsuario);
                    if (objClienteBE != null)
                    {
                        if (!string.IsNullOrEmpty(objClienteBE.Correo))
                        {
                            objUsuario = new UsuarioBE();
                            objUsuario.Usuario = pUsuario;
                            objUsuario.Clave = RandomClass.RandomString(11);//genera contraseña de 11 caracteres
                            objUsuario.Nombre = objClienteBE.Nombre;
                            objUsuario.Ramo = objClienteBE.Ramo;
                            objUsuario.Correo = objClienteBE.Correo;

                            retval = DAOFactory.UsuarioDALC.write(objUsuario);
                            if (string.IsNullOrEmpty(retval))//se registró correctamente
                            {
                                //enviar correo electrónico al cliente indicando su nueva contraseña
                                retval = enviarCorreo(objUsuario.Clave, objUsuario.Correo,objUsuario.Nombre);
                                if (!string.IsNullOrEmpty(retval))
                                {
                                    retval = "Error al enviar el correo: " + retval;
                                }
                            }
                        }
                        else
                        {
                            retval = "El usuario no tiene registrado un correo electrónico. Favor, contacte al administrador del sistema.";
                        }
                    }
                    else
                    {
                        retval = "El usuario ingresado es inválido.";
                    }
                }
                else
                {
                    if (!string.IsNullOrEmpty(objUsuario.Correo))
                    {
                        objUsuario.Clave = RandomClass.RandomString(11);//genera contraseña de 11 caracteres
                        update(objUsuario);
                        //retval = "Se envió un e-mail con su nueva clave.";
                        //enviar correo electrónico al cliente indicando su nueva contraseña
                        retval = enviarCorreo(objUsuario.Clave, objUsuario.Correo, objUsuario.Nombre);
                    }
                    else
                    {
                        retval = "El usuario no tiene registrado un correo electrónico. Favor, contacte al administrador del sistema.";
                    }
                }
            }
            catch (Exception ex)
            {
                retval = ex.Message;
            }
            return retval;
        }

        public static string login(string pUsuario, string pClave)
        {
            string retval = string.Empty;
            try
            {
                if (!string.IsNullOrEmpty(pUsuario.Trim()) && !string.IsNullOrEmpty(pClave.Trim()))
                {
                    retval = DAOFactory.UsuarioDALC.login(pUsuario.Trim(), pClave.Trim());
                }
                else
                {
                    retval = "Debe ingresar el nombre y la clave de acceso.";
                }
            }
            catch (Exception ex)
            {
                retval = ex.Message;
            }
            return retval;
        }

        public static string update(UsuarioBE objUsuario)
        {
            string retval = string.Empty;
            try
            {
                retval = DAOFactory.UsuarioDALC.update(objUsuario);
            }
            catch (Exception ex)
            {
                retval = ex.Message;
            }
            return retval;
        }

        public static ClassListObjetBE usuariosXcriterioXmensaje(UsuarioBE pObjUsuarioBE, int pMensaje_id)
        {
            ClassListObjetBE retval = null;
            try
            {
                retval = DAOFactory.UsuarioDALC.usuariosXcriterioXmensaje( pObjUsuarioBE, pMensaje_id);
            }
            catch (Exception ex)
            {

            }
            return retval;        
        }
        public static string write(UsuarioBE pObjUsuarioBE) 
        {
            string retval = string.Empty;
            try
            {
                retval = DAOFactory.UsuarioDALC.write(pObjUsuarioBE);
            }
            catch (Exception ex)
            {
                retval = ex.Message;
            }
            return retval;
        }

        public static UsuarioBE read(string pUsuario)
        {
            UsuarioBE retval = null;
            try
            {
                retval = DAOFactory.UsuarioDALC.read(pUsuario);
            }
            catch (Exception ex)
            {
                
            }
            return retval;
        }

        public static List<UsuarioBE> read(UsuarioBE pObjUsuarioBE)
        {
            List<UsuarioBE> retval = null;
            try
            {
                retval = DAOFactory.UsuarioDALC.read(pObjUsuarioBE);
            }
            catch (Exception ex)
            {

            }
            return retval;
        }

        public static List<GenericBE> read(bool pTipoUsuario)
        {
            List<GenericBE> retval = null;
            try
            {
                retval = DAOFactory.UsuarioDALC.read(pTipoUsuario);
            }
            catch (Exception ex)
            {

            }
            return retval;
        }
    }
}
